package com.javabasic.algorithm.leetcode;

import java.util.Stack;

public class 剑指_Offer_09_用两个栈实现队列 {

}

/**
 * 解题思路：将插入的数据均通过同一个stack1，来做入口进入到队列中；
 * 删除数据时分4，中情况来讨论：
 * 1. stack1、stack2均是空栈，直接返回-1 -- 说明该队列中没有元素
 * 2. stack1不是空栈、stack2是空栈，说明之前做的操作都是元素入队列，
 * 将入队栈[stack1]中的元素，依次弹出并输入到出队栈[stack2]中，此时删除数据只要删除stack2栈顶的数据元素即可
 * 3. stack1是空栈、stack2不是空栈，说明自上一次操作到现在都没元素入队列，此时删除数据只要删除stack2栈顶的数据元素即可
 * 3. stack1不是空栈、stack2不是空栈，由于stack2是出队栈且其不为空栈，此时删除数据只要删除stack2栈顶的数据元素即可
 *
 */
class CQueue {

    Stack<Integer> stack1, stack2;
    public CQueue() {
        stack1 = new Stack<>();
        stack2 = new Stack<>();
    }

    public void appendTail(int value) {
        stack1.push(value);
    }

    public int deleteHead() {
        if (stack1.isEmpty() && stack2.isEmpty()) {
            return -1;
        } else if (stack1.isEmpty() && !stack2.isEmpty()) {
            return stack2.pop();
        } else if (!stack1.isEmpty() && stack2.isEmpty()) {
            while (!stack1.isEmpty()) {
                stack2.push(stack1.pop());
            }
            return stack2.pop();
        } else {
            return stack2.pop();
        }
    }
}
